/**
 * @description 格式化字典
 * @date 2020-06-21
 * @param {(string | undefined)} name 选中项
 * @param {Dict[]} list 字典数组
 * @param {keyof Dict} [type='value'] 返回字典属性, 默认返回 value 属性
 */

export function fmtDict(name: string | number | undefined | boolean, list: Dict[], type: keyof Dict = 'label') {
  if (name === -1) return '--'
  if (name || name === 0 || name === false) {
    const index = list.findIndex(item => {
      return String(item.value) === String(name)
    })
    if (index !== -1) {
      return list[index][type] || '--'
    } else {
      return '--'
    }
  } else {
    return '--'
  }
}

/**
 * @description 是否为空 / -1 / null
 * @date 2020-10-28
 * @param {(string | number | undefined)} name 判断值
 */
export function isNull(name: string | number | undefined) {
  if (typeof name === 'string') {
    return name !== '' ? name : '--'
  } else if (typeof name === 'number') {
    return name !== -1 ? name : '--'
  } else {
    return '--'
  }
}

/**
 * @description: 数字转换金钱, 保留两位
 * @param {number} num
 * @return {string}
 */
export function fmtNumToFixed(num: number): string {
  const str = String(num)
  const decimal = str.indexOf('.')
  if (decimal > -1) {
    const decimalBehind = str.split('.')[1]
    if (decimalBehind.length === 1) {
      return str + '0'
    } else if (decimalBehind.length === 2) {
      return str
    } else {
      return str + decimalBehind.substr(0, 2)
    }
  } else {
    return str + '.00'
  }
}

/**
 * @description: 多级联动 select 转换值
 * @param {<Array>number} arr 选中值
 * @param {AnyArray} list 数据源
 * @return {string}
 */
export function fmtMutilSelect(arr: number[], list: AnyArray): string {
  const obj = {
    value: '',
    index: 0
  }
  _fmtValue(arr, list, obj)
  return obj.value.substr(0, obj.value.length - 1)
}

function _fmtValue(arr: number[], list: AnyArray, obj: AnyObject) {
  const data = list.find(item => {
    return item.value === arr[obj.index]
  })
  if (data !== undefined) {
    obj.value += data.label + '-'
    if (obj.index === arr.length - 1) return
    obj.index++
    _fmtValue(arr, data.children, obj)
  }
}
